package org.jeecg.modules.demo.yyc.unit;

import java.time.*;
import java.time.format.DateTimeFormatter;
import java.util.Date;

/**
 * 类说明
 *
 * @ClassName DateUnit
 * @Description TODO
 * @Author think
 * @Date 2022/11/2 9:29
 **/
public class DateUnit {

    private static final String DEFAULT_FORMAT = "yyyy-MM-dd HH:mm:ss";

    /**
     * 用默认格式将时间格式化
     * @param localDate 要格式化的时间
     * @return 返回字符串
     */
    public static String formattedDateDefault(LocalDateTime localDate) {
        return formattedDate(localDate,DEFAULT_FORMAT);
    }

    /**
     * 格式化日期
     * @param localDate 日期
     * @param outputFormat 格式
     * @return 返回字符串
     */
    public static String formattedDate(LocalDateTime localDate, String outputFormat) {
        DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern(outputFormat);
        return localDate.format(outputFormatter);
    }

    /**
     * 将当前时间格式化成默认格式
     * @return 返回字符串
     */
    public static String formattedNowDefault() {
        return formattedNow(DEFAULT_FORMAT);
    }

    /**
     * 格式化当前时间
     * @param outputFormat 格式
     * @return 返回字符串
     */
    public static String formattedNow(String outputFormat) {
        DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern(outputFormat);
        return LocalDateTime.now().format(outputFormatter);
    }

    public static LocalDateTime parseDateTime(String dateString, String outputFormat){
        DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern(outputFormat);
        return LocalDateTime.parse(dateString, outputFormatter);
    }

    public static LocalDate parseDate(String dateString, String outputFormat){
        DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern(outputFormat);
        return LocalDate.parse(dateString, outputFormatter);
    }

    public static LocalDateTime parseDateTimeDefault(String dateString){
        return parseDateTime(dateString,DEFAULT_FORMAT);
    }

    public static Date localDateTimetoDate(LocalDateTime localDateTime){
        ZonedDateTime zonedDateTime = localDateTime.atZone(ZoneId.systemDefault());
        // 本地时间线LocalDateTime到即时时间线Instant时间戳
        Instant instant = zonedDateTime.toInstant();
        // UTC时间(世界协调时间,UTC + 00:00)转北京(北京,UTC + 8:00)时间
        return Date.from(instant);
    }

    public static Date localDatetoDate(LocalDate localDate){
        ZonedDateTime zonedDateTime = localDate.atStartOfDay().atZone(ZoneId.systemDefault());
        // 本地时间线LocalDateTime到即时时间线Instant时间戳
        Instant instant = zonedDateTime.toInstant();
        // UTC时间(世界协调时间,UTC + 00:00)转北京(北京,UTC + 8:00)时间
        return Date.from(instant);
    }
}
